<?php

include "vendor/autoload.php";
set_time_limit(0);
ignore_user_abort(true);
ini_set("memory_limit", '2048M');
date_default_timezone_set('Asia/Shanghai');

use think\facade\Db;

Db::setConfig(
    [
        // 默认数据连接标识
        'default' => 'orign',
        // 数据库连接信息
        'connections' => [
            'origin' => [
                // 数据库类型
                'type' => 'mysql',
                // 主机地址
                'hostname' => '10.1.75.78',
                // 用户名
                'username' => 'video',
                // 数据库密码
                'password' => 'wwLizyT5CSYB5it5',
                // 数据库名
                'database' => 'video',
                // 数据库编码默认采用utf8
                'charset' => 'utf8',
                // 数据库表前缀
                'prefix' => 'mac_',
                // 数据库调试模式
                'debug' => true,
                'break_reconnect' => true
            ],
            'target' => [
                // 数据库类型
                'type' => 'mysql',
                // 主机地址
                'hostname' => '129.226.113.157',
                // 用户名
                'username' => 'damitw',
                // 数据库密码
                'password' => 'Hj4bfaKXZpnhC3Rb',
                // 数据库名
                'database' => 'damitw',
                // 数据库编码默认采用utf8
                'charset' => 'utf8',
                // 数据库表前缀
                'prefix' => 'mac_',
                // 数据库调试模式
                'debug' => true,
                'break_reconnect' => true
            ],
        ],
    ]
);
$orignDb = Db::connect('origin');
$targetDb = Db::connect('target');

function selfLog()
{
    ob_start();
    $args = func_get_args();
    var_export(date('Y-m-d H:i:s') . '-' . microtime(true));
    foreach ($args as $arg) {
        echo json_encode($arg, JSON_UNESCAPED_UNICODE) . "\n";
    }
    echo "\n\r";
    ob_flush();
    ob_end_flush();
}


/**
 * 业务逻辑读取一个文件记录的上次更新结束后最后的时间不管成功结束都更新
 */
function syncVod()
{
    global $orignDb, $targetDb;
    $lastUpdateFile = __DIR__ . '/lastVodId.txt';
    if(!file_exists($lastUpdateFile)){
        file_put_contents($lastUpdateFile,0);
        $lastVodId =0;
    }else{
        $lastVodId = file_get_contents($lastUpdateFile);
    }
    if (empty($lastVodId)) {
        $lastVodId = 0;
    } else {
        $lastVodId = intval($lastVodId);
    }

    selfLog('开始处理所有电影的同步');
    try {
        //获取target数据库mac_vod的最后更新时间
        $vodIds = $orignDb->name('vod')->where('vod_id','>',$lastVodId)->order('vod_id', 'asc')->column('vod_id');
        $count = count($vodIds);
        selfLog('本次更新视频数据共计获取到数据' . $count . '条');
        foreach ($vodIds as $key => $vodId) {
            selfLog('当前正在处理第'.($key+1).'条 还剩'.($count - $key - 1).'条');

            $orignVodInfo = $orignDb->name('vod')->where('vod_id',$vodId)->find();
            $targetVodCount = $targetDb->name('vod')->where('vod_id',$vodId)->count();
            if(!$targetVodCount){
                selfLog('未查询到'.$vodId.',插入');
                $targetDb->name('vod')->insertGetId($orignVodInfo);
            }else{
                selfLog('查询到'.$vodId.',更新');
                $targetDb->name('vod')->where('vod_id',$vodId)->update($orignVodInfo);
            }
            file_put_contents($lastUpdateFile,$vodId);

        }
        selfLog('更新视频信息结束');

    } catch (\Exception $e) {
        selfLog($e->getMessage());
        selfLog($e->getTrace());
    }
}
$startTime = microtime(true);
syncVod();
$endTime = microtime(true);
selfLog('共计耗时'.($endTime - $startTime).'秒');